package cn.wrl.item.service;

import cn.wrl.item.pojo.Items;
import cn.wrl.item.pojo.ItemsImg;
import cn.wrl.item.pojo.ItemsParam;
import cn.wrl.item.pojo.ItemsSpec;
import cn.wrl.item.pojo.vo.CommentLevelCountsVO;
import cn.wrl.item.pojo.vo.ShopcartVO;
import cn.wrl.pojo.PagedGridResult;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.List;

@FeignClient("foodie-item-service")
@RequestMapping("item-api")
public interface ItemService {

    /**
     * 根据商品id查询详情
     *
     * @param itemId
     * @return
     */
    @GetMapping("item")
    Items queryItemById(@RequestParam("itemId") String itemId);

    /**
     * 根据商品id查询图片列表
     *
     * @param itemId
     * @return
     */
    @GetMapping("itemImgList")
    List<ItemsImg> queryItemImgList(@RequestParam("itemId") String itemId);

    /**
     * 根据商品id 查询商品规格
     *
     * @param itemId
     * @return
     */
    @GetMapping("itemSpec")
    List<ItemsSpec> queryItemSpecList(@RequestParam("itemId") String itemId);

    /**
     * 根据商品id 查询商品属性
     *
     * @param itemId
     * @return
     */
    @GetMapping("itemParam")
    ItemsParam queryItemParam(@RequestParam("itemId") String itemId);

    /**
     * 根据商品id查询商品的评价等级
     *
     * @param itemId
     */
    @GetMapping("countComments")
    CommentLevelCountsVO queryCommentCounts(@RequestParam("itemId") String itemId);

    /**
     * 根据商品id查询商品的评价（分页）
     *
     * @param itemId
     * @param level
     * @param page     第几页
     * @param pageSize 每页显示的条数
     * @return
     */
    @GetMapping("pageComments")
    PagedGridResult queryPagedComments(@RequestParam("itemId") String itemId,
                                       @RequestParam(value = "level", required = false) Integer level,
                                       @RequestParam(value = "page", required = false) Integer page,
                                       @RequestParam(value = "pageSize", required = false) Integer pageSize);

    /**
     * 根据规格ids查询最新购物车中的商品数据。用于刷新渲染购物车中的商品数数据
     *
     * @param specId
     * @return
     */
    @GetMapping("queryItemsBySpecIds")
    List<ShopcartVO> queryItemsBySpecIds(@RequestParam("specId") String specId);


    /**
     * 根据商品规格id，获取规格的具体对象
     *
     * @param specId
     * @return
     */
    @GetMapping("queryItemsBySpecId")
    ItemsSpec queryItemsBySpecId(@RequestParam("specId") String specId);

    /**
     * 根据商品id获取商品图片主图
     *
     * @param itemId
     * @return
     */
    @GetMapping("queryItemMainImgById")
    String queryItemMainImgById(@RequestParam("itemId") String itemId);

    /**
     * 减少库存
     *
     * @param specId
     * @param buyCount
     */
    @PostMapping("decreaseItemSpecStock")
    void decreaseItemSpecStock(@RequestParam("specId") String specId,
                               @RequestParam("buyCount") int buyCount);
}
